<template>
  <div class="app-container">
    <div class="ces-main">



      <el-form ref="form" :model="FormData" :inline="true" :rules="rules" label-position="right" label-width="120px">


        <el-form-item v-if="this.StepSN == 0 || this.StepSN == -999" style="height:5px">

          <el-button type="primary" size="mini" icon="el-icon-tickets" @click="confirmData(0)">保存</el-button>
        </el-form-item>
        <el-form-item v-if="this.StepSN == 0" style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="confirmData(1)">提交</el-button>
        </el-form-item>

        <el-form-item v-if="this.StepSN > 0" style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-tickets" @click="confirmData(0)">保存</el-button>
        </el-form-item>
        <el-form-item v-if="this.StepSN > 0" style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="confirmData(3)">退回上一步</el-button>
        </el-form-item>
        <el-form-item v-if="this.StepSN > 0" style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="confirmData(2)">审核</el-button>
        </el-form-item>

        <el-form-item style="height:5px">
          <el-button type="primary" size="mini" icon="el-icon-check" @click="handleClose()">关闭</el-button>


          <!-- <el-button
              type="primary"
              size="mini"
              icon="el-icon-tickets"
              @click="Test()"
              >测试</el-button
            > -->
        </el-form-item>


      </el-form>

      <span style="
            text-align: center;
            font-size: 20px;
            font-weight: bold;
            display: inline-block;
            width: 100%;
            padding: 3px 0 5px 0;
          ">
        <span>BOM</span>
        <span style="margin-left: 10px">
          <svg-icon v-if="this.FormData.Status == 0 || this.FormData.Status == null" icon-class="Editing" />
          <svg-icon v-if="this.FormData.Status == 1" icon-class="ingAudit" />
          <svg-icon v-if="this.FormData.Status == 2" icon-class="Finish" />
        </span>
      </span>

      <el-form :model="FormData" label-width="90px">
        <Mian-Form ref="refFormData" labelWidth='150' :FormData='FormData' :tableCols='FormCols' :StepSN='StepSN'
          @handleOpen="handleOpen"></Mian-Form>
      </el-form>


      <el-form :inline="true" :model="Search" class="demo-form-inline" size="mini">
      </el-form>
      <el-form ref="form" :model="FormData" :inline="true" :rules="rules" label-position="right" label-width="120px">


        <el-form-item style="height:10px">
          <section class="ces-handle">
            <el-button v-if="this.StepSN == 0 || this.StepSN == -999" type="primary" size="mini"
              @click="handleOpen('PrdNo')" icon="el-icon-tickets">添加物料</el-button>
          </section>
        </el-form-item>
        <el-form-item style="height:10px">
          <section class="ces-handle">
            <v-UploadOpen @returnData="handleUploadOpen" :UploadArr='UploadArr'></v-UploadOpen>
          </section>
        </el-form-item>
      </el-form>
      <ces-table size='mini' ref="reftableData" :isSelection='false' :isIndex='true' :isSearch='false' :isHandle='true'
        :IsfunEdit='true' :Isfunfail='this.StepSN == 0 || this.StepSN == -999 ? true : false' :StepSN=this.StepSN
        :WFStepSN='WFStepSN' :tableData='tableData' :tableCols='tableCols' @handleEdit='handleEdit'
        @handleDelete="delData">
      </ces-table>
    </div>


    <el-main style="margin: 1px 10px">
      <span class="blueColor" style="font-size: 15px; font-weight: blod; padding: 10px">审核明细：</span>

      <el-timeline :reverse="true" ref="ListLog" :model="ListLog">
        <el-timeline-item v-for="(activity, index) in ListLog" :key="index" :timestamp="activity.CreateDateTime">
          {{ activity.Remark }}
        </el-timeline-item>
      </el-timeline>
    </el-main>


    <el-dialog v-if="dialogFormVisible" :visible.sync="dialogFormVisible" :title="人员资料" width="800px">
      <el-form :model="name" label-width="80px" label-position="left">
        <v-AccountOpen :ParmType="ParmType" @FunRowAdd="FunrRowsAdd"></v-AccountOpen>
      </el-form>
    </el-dialog>


    <el-dialog v-if="dialogCUSTVisible" :visible.sync="dialogCUSTVisible" :title="客户资料" width="800px">
      <el-form :model="name" label-width="80px" label-position="left">
        <v-CUSTOpen :ParmType="ParmType" :CUSTtype='1' @FunRowAdd="FunrRowsAdd"></v-CUSTOpen>
      </el-form>
    </el-dialog>

    <!-- 11 -->
    <el-dialog v-if="dialogPRDTVisible" :visible.sync="dialogPRDTVisible" :title="料品资料" width="900px">
      <el-form :model="name" label-width="80px" label-position="left">
        <v-PRDTOpen :ParmType="ParmType" :Where="ProWhere" :CUSTtype='1' @FunRowAdd="FunrRowsAdd"
          KeyName='PrdNo'></v-PRDTOpen>
      </el-form>
    </el-dialog>


    <el-dialog v-if="dialogPUOrderVisible" :visible.sync="dialogPUOrderVisible" :title="采购订单资料" width="80%">
      <el-form :model="name" label-width="80px" label-position="left">
        <v-PUOrderDetailOpen :ParmType="ParmType" :ParmName="ParmName" @FunRowAdd="FunrRowsAdd"></v-PUOrderDetailOpen>
      </el-form>
    </el-dialog>


  </div>
</template>

<script>


//引入组件

import cesTable from "../Common//table.vue";
import SearchForm from "../Common//Search.vue";
import MianForm from "../Common//form.vue";

import { funDownload, GetTableColsData, GetFormColsData } from "@/api/Common";
import { UpdateForm, DeleteRowForm, DeleteForm } from '@/api/MesBasic/Bom'; //更改
import vGetToolBar from "../Common/GetToolBar";
import vAccountOpen from "../Common/AccountOpen";
import vCUSTOpen from "../Common/CUSTOpen";
import vPRDTOpen from "../Common/PRDTOpen";
import vPUOrderDetailOpen from "../Mespurchase/PUOrderDetailOpen";
import vUploadOpen from "../Common/UploadOpen";
export default {

  props: {
    inputName: String,
    required: true,
  },

  data() {
    //表单查询一般分为input，下拉框，和日期，下面是下拉框时的设置下拉信息的情况，我的项目没有用到，但是留着方便看

    return {
      tableData: [],//表格数据
      FormData: [],//表格数据
      FormCols: [],//表头数据
      tableCols: [],//表格列数据
      StepSN: -1,
      WFStepSN: '0',
      billID: null,
      ListLog: [],
      IsfunEdit: false,
      Search: {
        // 查询条件
        total: 0, // 总记录数
        pageSize: 13, // 一页显示的记录数
        page: 1, // /当前页码
        RNO: "003", // 表编号  根据Controller中对应的表编号 //更改
        jsWhere: "", // 自定义条件     
      },
      rules: {
        ProductNo: [
          { required: true, message: "请输入物料编号", trigger: "blur" },
        ],
      },
      cities: [
        {
          value: "0",
          label: "草稿",
        },
        {
          value: "1",
          label: "审核中",
        },
        {
          value: "2",
          label: "结案",
        },
        {
          value: "3",
          label: "作废",
        },
      ],
      SearchDialog: false,
      DialogBtnMargin: 0,
      dialogVisible: false,
      dialogFormVisible: false,
      dialogCUSTVisible: false,
      dialogPRDTVisible: false,
      dialogPUOrderVisible: false,
      ParmType: "",
      ParmName: "",
      ProWhere: "",
      UploadArr: [
        { Fieldname: "PartNo", CName: "物料编号" },
        { Fieldname: "PartNamel", CName: "物料名称" },
        { Fieldname: "IDXI", CName: "类别" },
        { Fieldname: "SPC", CName: "规格" },
        { Fieldname: "UT", CName: "单位" },
        { Fieldname: "Scale", CName: "用量" },
        { Fieldname: "IsSend", CName: "是否外发" },
        { Fieldname: "FigureNo", CName: "图号" },
        { Fieldname: "SourceType", CName: "来源" },
        { Fieldname: "Remark1", CName: "备注" },

      ]

    }

  },

  components: { //引入组件后注册组件
    cesTable,
    SearchForm,
    MianForm,
    vAccountOpen,
    vCUSTOpen,
    vPRDTOpen,
    vPUOrderDetailOpen,
    vUploadOpen
  },
  mounted() {

    this.getTableCols()
    this.getDataList()


  },
  methods: {


    //读取列配置
    async getTableCols() {
      this.tableCols = [];
      this.FormCols = [];

      const resCols = await GetFormColsData({ InterID: "360" }); //更改
      this.FormCols = resCols.data;


      const res = await GetTableColsData({ InterID: "361" }); //更改
      this.tableCols = res.data;

    },
    async getDataList() {




      if (this.inputName == null) {
        this.inputName = this.$route.query.billID;
      }
      ;
      const result = await UpdateForm({
        billID: this.inputName,
        IsPostBack: false,
      });

      this.FormData = result.data1.Table[0];

      this.tableData = result.data2.Table;

      this.ListLog = result.ListLog;
      this.StepSN = result.StepSN;




    }, OpenFindForm() {
      //打开搜索框
      this.SearchDialog = true;
      //计算外边距
      console.log(this.$refs.searchDialog.offsetHeight);
      this.DialogBtnMargin = this.$refs.searchDialog.offsetHeight - 40;
    }, async confirmData(submit) {
      // 提交数据，需要修改

      const Fresult = true;
      if (submit == 1) {



        let flag = this.$refs['refFormData'].validateForm();



        let flag1 = this.$refs['reftableData'].validateForm();


        if (flag == false || flag1 == false) {
          this.$notify({
            title: "不能提交",
            dangerouslyUseHTMLString: true,
            message: "不可为空，不能提交",
            type: "error",
          });
          Fresult = false;
          return false;

        }

        if (this.tableData.length <= 0) {
          this.$notify({
            title: "不能提交",
            dangerouslyUseHTMLString: true,
            message: "行没有数据，不能提交",
            type: "error",
          });
          Fresult = false;
          return false;

        }

      }





      if (this.FormData.ProductNo == "") {
        Fresult = false;
        this.$notify({
          title: "不能保存",
          dangerouslyUseHTMLString: true,
          message: "产品不可为空，不能保存",
          type: "error",
        });
        return false;
      }


      let options = "保存中...";

      if (submit == 1) {
        options = "提交中...";
      } else if (submit == 2) {
        options = "审批中...";
      } else if (submit == 3) {
        options = "退回中...";
      }

      const loading = this.$loading({
        lock: true,
        text: options,
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      });

      if (Fresult) {
        const result = await UpdateForm({
          HeadDate: JSON.stringify(this.FormData),
          BodyDate: JSON.stringify(this.tableData),
          billID: this.FormData.ProductNo,
          IsPostBack: true,
          submit: submit,
        });
        loading.close();
        this.FormData = result.data1.Table[0];
        this.tableData = result.data2.Table;
        this.ListLog = result.ListLog;
        this.StepSN = result.StepSN;
        if (result.code === 20000) {

          this.dialogVisible = false;
          this.$notify({
            title: result.msg,
            dangerouslyUseHTMLString: true,
            message: "",
            type: "success",
          });

          this.$router.push({
            path: "/MesBasic/BomDetailForm",
            query: { billID: this.FormData.ProductNo, IsPostBack: false },
          });
        } else {
          this.$notify({
            title: result.msg,
            dangerouslyUseHTMLString: true,
            message: "",
            type: "error",
          });
        }
      } else {

      }
    },
    handleOpen(name) {


      if (name == "MoneymanName") {
        this.ParmType = "MoneymanName"; //传入参数
        this.dialogFormVisible = true;
      } else if (name == "CustomerName") {
        this.ParmType = "CustomerName"; //传入参数
        this.dialogCUSTVisible = true;
      } else if (name == "PrdNo") {


        this.ProWhere = " and IDXI<>'A01'";
        this.ParmType = "PrdNo"; //传入参数
        this.dialogPRDTVisible = true;
      } else if (name == "ProductNo") {

        this.ProWhere = " and IDXI='A01'";
        this.ParmType = "ProductNo"; //传入参数
        this.dialogPRDTVisible = true;
      }

    },
    FunrRowsAdd: function (Rows, ParmType) {
      //添加人员

      this.multipleTable = Rows[0];

      if (ParmType == "MoneymanName") {
        this.FormData.Moneyman = this.multipleTable.UserCode;
        this.FormData.MoneymanName = this.multipleTable.UserName;
        this.dialogFormVisible = false;
      } else if (ParmType == "CustomerName") {
        this.FormData.CustomerCode = this.multipleTable.CUS_NO;
        this.FormData.CustomerName = this.multipleTable.NAME;
        this.dialogCUSTVisible = false;
      } else if (ParmType == "ProductNo") {
        this.FormData.ProductNo = this.multipleTable.PrdNo;
        this.FormData.ProductName = this.multipleTable.PrdName;
        this.FormData.SPC = this.multipleTable.SPC;
        this.dialogPRDTVisible = false;
      } else if (ParmType == "PrdNo") {


        for (let v of Rows) {

          //判断重复不能添加
          let Isjudge = this.tableData.filter(function (item) {
            if (item.PartNo == v.PrdNo) {
              return item;
            }
          })





          if (Isjudge.length == 0) {
            this.multipleTable = v;
            let row = {
              PartNo: this.multipleTable.PrdNo,
              PartNamel: this.multipleTable.PrdName,
              SPC: this.multipleTable.SPC,
              UT: this.multipleTable.UT,
              SourceType: this.multipleTable.SourceType,
              FigureNo: this.multipleTable.FigureNo,


            };
            this.tableData.push(row);

          }

        }

        this.dialogPRDTVisible = false;
      }



    }, async handleEdit(scope) {
      // 修改

      if (scope.row.IDXI == "A02") {

        let routeUrl = this.$router.push({
          path: "/MesBasic/BomPartDetailForm",//更改
          name: 'BomPartDetailForm',
          query: { billID: scope.row.PartNo, IsPostBack: false },
        });
        window.open(routeUrl.href, "_top");
      } else {
        this.$notify({
          title: "不能添加",
          dangerouslyUseHTMLString: true,
          message: "不是半成品，不能添加",
          type: "error",
        });
      }



      this.inputName = row.PartNo;


    },
    handleUploadOpen(ploadDate) {






      for (let v of ploadDate) {


        let Isjudge = this.tableData.filter(function (item) {
          if (item.PartNo == v.PartNo) {
            return item;
          }
        })





        if (Isjudge.length == 0) {


          this.tableData.push(v);
        }
      }
    },
    handleClose() {
      this.$store.dispatch('tagsView/delView', this.$route)
      // 返回上一步路由
      this.$router.go(-1)
    }, async Test() {
      const result = await DeleteForm({

        billID: '11111',
        types: 1,
        IsPostBack: false,
      });

      this.$message({
        type: "success",
        message: result.msg,
      });
    }, async delData({ $index, row }) {
      this.$confirm('删除操作, 是否继续?', '提示', {
        confirmButtonText: "确认",
        cancelButtonText: "取消",
      })
        .then(async () => {


          this.tableData.splice($index, 1);



          if (row.ID == null) { //更改
            return false;
          }
          let that = this.$router;
          const result = await DeleteRowForm({
            ID: row.ID,
            billID: this.inputName,
            IsPostBack: false,
          });

          this.$message({
            type: "success",
            message: result.msg,
          });

        })
        .catch((err) => {
          console.error(err);
        });
    },

  }
}
</script>

<style lang="scss" scoped>
.app-container {
  .EditObjs-table {
    margin-top: 30px;
  }

  .permission-tree {
    margin-bottom: 5px;
  }
}

.searchDialog ::v-deep .el-dialog__header {
  background: #409eff;
}

.searchDialog ::v-deep .el-dialog__title {
  color: #fff;
}

.searchDialog ::v-deep .el-dialog__headerbtn .el-dialog__close {
  color: #fff;
}

.infoColor {
  font-weight: bold;
  color: #909399;
}

.redColor {
  font-weight: bold;
  color: red;
}

.blueColor {
  font-weight: bold;
  color: #409eff;
}

.orangeColor {
  font-weight: bold;
  color: orange;
}

.greenColor {
  font-weight: bold;
  color: #67c23a;
}
</style>